
#include <stdbool.h>
// 宏定义栈的最大容量
/**
 * @brief 顺序栈
 * @param
 * @return
 */
#define MAXSIZE 100
// 定义栈的结构
typedef struct inn
{
    int data[MAXSIZE];
    int top;
} SeqStack;
// 初始化栈
void InitStack(SeqStack *S);
// 判断栈是否为空
bool StackEmpty(SeqStack S);
// 判断栈是否已经满了
bool StackFull(SeqStack *S);
// 入栈操作
bool Push(SeqStack *S, int elem);
// 出栈操作
bool Pop(SeqStack *S, int *elem);
// 获得栈顶元素（不删除）
bool GetTop(SeqStack S, int *elem);
// 打印栈中的元素，从栈底到栈顶
void PrintStack(SeqStack S);
// 清空栈

void ClearStack(SeqStack *S);
// 获得栈中元素个数
int StackLength(SeqStack S);

/**
 * @brief 链表栈
 * @param
 * @return
 */
typedef struct StackNode
{
    int data;
    struct StackNode *next;
} StackNode, *LinkStack;
// 初始化链表
void InitStack_link(LinkStack *S);
// 判断栈是否为空
bool StackEmpty_link(LinkStack S);
// 入栈操作
bool Push_link(LinkStack *S, int elem);
// 出栈操作
bool Pop_link(LinkStack *S, int *elem);
// 获得栈顶元素
bool GetTop_link(LinkStack S, int *elem);
// 打印栈中的元素
void PrintStack_link(LinkStack S);
// 清空栈
void ClearStack_link(LinkStack *S);
// 获得栈的长度
int StackLength_link(LinkStack S);